/*
 *
 *  * Copyright (c) iwindplus Technologies Co., Ltd.2024-2030, All rights reserved.
 *
 *
 */

package com.iwindplus.base.rocket.service;

import com.iwindplus.base.rocket.domain.dto.RocketMessageDTO;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;

/**
 * rocket业务层接口类.
 *
 * @param <T> 泛型
 * @author zengdegui
 * @since 2023/10/15 11:29
 */
public interface RocketService<T> {

    /**
     * 获取RocketMQTemplate.
     *
     * @return RocketMQTemplate
     */
    RocketMQTemplate getRocketTemplate();

    /**
     * 发送同步消息.
     *
     * @param entity 对象
     * @return SendResult
     */
    SendResult syncSend(RocketMessageDTO<T> entity);

    /**
     * 异步发送消息，异步返回消息结果
     *
     * @param entity 对象
     */
    void asyncSend(RocketMessageDTO<T> entity);

    /**
     * 单向发送消息，不关心返回结果，容易消息丢失，适合日志收集、不精确统计等消息发送;
     *
     * @param entity 对象
     */
    void sendOneWay(RocketMessageDTO<T> entity);
}
